package jm.nj.demo18main.demo03;

import org.apache.commons.beanutils.BeanUtils;


import java.util.Map;

/*
 * 自定义的BeanUtils工具类
 * 使用BeanUtils中的populate方法对,populate方法进行增强(优化)
 */
public class MyBeanUtils {
    //不让外界创建对象使用静态方法
    private MyBeanUtils(){

    }
    /*
     * 自定义populate方法:(了解)
     * 	1.调用BeanUtil中的populate方法
     * 	2.对方法的异常进行try...catch处理,使调用者不用管异常问题
     * 	3.根据用户传递JavaBean的class属性(class对象),方法内部通过反射创建对象调用populate使用
     * 	4.注入值把创建好的对象,给用户返回
     * 	5.可以给参数Class文件对象增加一个泛型,目的让用户传递什么类型,就返回什么类型,用户使用方法的时候避免了强转
     *
     * 定义含有泛型的方法
     * 	修饰符 <自定义泛型> 返回值类型  方法名(参数使用自定义泛型){
     * 		方法体;
     * 	}
     *
     * 方法的参数:
     * 	1.JavaBean对象
     * 	2.Map集合,key是字符串,值:字符串数组
     */
    public static <E>E populate03(Class clazz,Map<String,String[]>properties){
        try {
            E bean = (E) clazz.newInstance();
            BeanUtils.populate(bean,properties);
            return bean;
        } catch (Exception e) {
            System.out.println(e);
            throw new RuntimeException("不行");
        }
    }



    /*
    *自定义populate方法:
    * 1.调用BeanUtil中的populate方法
    *2.对方法的异常进行try...catch处理,使调用者不用管异常问题
    * 根据用户传递JavaBean的class属性(class对象),方法内部通过反射创建对象调用populate使用
    * 4.注入值把创建好的对象,给用户返回
    *
    * 方法的参数:
     * 	1.JavaBean对象
     * 	2.Map集合,key是字符串,值:字符串数组
    * */
    public static  Object populate02(Class clazz,Map<String,String[]> properties){
        try {
            Object bean = clazz.newInstance();

            BeanUtils.populate(bean,properties);

            return bean;
        }catch (Exception e){
            System.out.println(e);
            throw new RuntimeException("不行");
        }
    }


    /*
    ** 自定义populate方法:
     * 	1.调用BeanUtil中的populate方法
     * 	2.对方法的异常进行try...catch处理,使调用者不用管异常问题
     *
     *
     ** 方法的参数:
     * 	1.JavaBean对象
     * 	2.Map集合,key是字符串,值:字符串数组
     *
    * */

    public static void populate01(Object bean , Map<String,String[]> properties){

        try {
            BeanUtils.populate(bean,properties);
        } catch (Exception e) {
            System.out.println(e);
            throw new RuntimeException("给JavaBean注入值失败");
        }


    }

}
